package com.java.main.pdf;



import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfTextFormField;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;

import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Pdf {
//    public static void main(String[] args) {
//        try {
//            // 1. 读取现有的PDF模板
//            PdfReader templateReader = new PdfReader("D:\\Desktop\\托管3.0\\template.pdf");
//
//            // 2. 创建新的PDF文档
//            Document document = new Document();
//            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:\\Desktop\\托管3.0\\output.pdf"));
//            document.open();
//
//            // 3. 获取模板的总页数
//            int totalPages = templateReader.getNumberOfPages();
//            PdfReaderContentParser parser = new PdfReaderContentParser(templateReader);
//            // 4. 循环遍历每一页，导入到新文档并填充内容
//            for (int i = 1; i <= totalPages; i++) {
//                TextExtractionStrategy strategy = parser.processContent(i, new LocationTextExtractionStrategy());
////                String text = PdfTextExtractor.getTextFromPage(templateReader, i);
//                String text = strategy.getResultantText();
//                Pattern pattern = Pattern.compile("\\$\\{([^}]*)\\}");
//                Matcher matcher = pattern.matcher(text);
//                // 执行替换
//                StringBuffer result = new StringBuffer();
//                while (matcher.find()) {
//                    String parameterName = matcher.group(1); // 获取参数名
//                    String replacement = getReplacement(parameterName); // 根据参数名获取实际替换的值
//
//                    // 将匹配的"${param}"替换为实际值
//                    matcher.appendReplacement(result, Matcher.quoteReplacement(replacement));
//                }
//                matcher.appendTail(result);
//
//                document.newPage();
////                PdfImportedPage page = writer.getImportedPage(templateReader, i);
////                writer.getDirectContent().addTemplate(page, 0, 0);
//
//                BaseFont baseFont = BaseFont.createFont("simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
//                Font font = new Font(baseFont,15);
//                document.add(new Paragraph(result.toString(),font));
//
//            }
//
//            // 5. 关闭文档
//            document.close();
//            templateReader.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }

    public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException {
        String inputPdfPath = "D:\\Desktop\\托管3.0\\test.pdf";
        String outputPdfPath = "D:\\Desktop\\托管3.0\\output.pdf";

        try (PdfReader pdfReader = new PdfReader(inputPdfPath);
             PdfWriter pdfWriter = new PdfWriter(outputPdfPath);
             PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter)) {
            // 获取AcroForm对象
            PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDocument, true);
            // 装配数据
            Map<String, Object> data = new HashMap<>(5);
            data.put("text1", "  经甲、乙双方友好协商，根据《中华人民共和国合同法》相关规定，甲方将其已承接的全部（或部分）${text1}业务转包给乙方，并达成如下协议，以资共同遵守：");
            data.put("text2", "132222233333333");
            data.put("text3", "132222233333");
            data.put("text4", "132222233333");
            data.put("text5", "132222233333333");

            // 遍历data，给pdf表单赋值
            for (String key : data.keySet()) {
                //设置普通文本数据
                // 获取要修改的表单域
                PdfTextFormField textField = (PdfTextFormField) form.getField(key);
                PdfFont font = PdfFontFactory.createFont("simfang.ttf");
                textField.setValue(data.get(key).toString(), font, 15);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 根据参数名获取实际替换的值的示例方法
    private static String getReplacement(String parameterName) {
        // 这里可以根据参数名获取实际的替换值
        // 在实际应用中，您可能会从配置文件、用户输入或其他来源获取这些值
        if ("text1".equals(parameterName)) {
            return "replacementValue";
        } else {
            return "unknownParameter";
        }
    }
}
